2d166a
@@ -17,16 +17,7 @@
  */
 package org.apache.hadoop.hive.ql.optimizer;
 
-import java.sql.Date;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Stack;
-
+import com.google.common.collect.Lists;
 import org.apache.hadoop.hive.common.StatsSetupConst;
 import org.apache.hadoop.hive.common.type.HiveDecimal;
 import org.apache.hadoop.hive.metastore.api.ColumnStatisticsData;
@@ -75,7 +66,6 @@
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDAFSum;
 import org.apache.hadoop.hive.serde.serdeConstants;
 import org.apache.hadoop.hive.serde2.io.DateWritable;
-import org.apache.hadoop.hive.serde2.io.TimestampWritable;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory;
 import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector.PrimitiveCategory;
@@ -85,7 +75,14 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.Lists;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Stack;
 
 
 /** There is a set of queries which can be answered entirely from statistics stored in metastore.
@@ -179,7 +176,7 @@
public MetaDataProcessor (ParseContext pctx) {
 
       abstract Object cast(double doubleValue);
     }
-    
+
     enum DateSubType {
       DAYS {@Override
         Object cast(long longValue) { return (new DateWritable((int)longValue)).get();}
@@ -289,6 +286,10 @@
public Object process(Node nd, Stack<Node> stack, NodeProcessorCtx procCtx,
           Logger.info("Table " + tbl.getTableName() + " is external. Skip StatsOptimizer.");
           return null;
         }
+        if (MetaStoreUtils.isNonNativeTable(tbl.getTTable())) {
+          Logger.info("Table " + tbl.getTableName() + " is non Native table. Skip StatsOptimizer.");
+          return null;
+        }
         if (AcidUtils.isTransactionalTable(tbl)) {
           //todo: should this be OK for MM table?
           Logger.info("Table " + tbl.getTableName() + " is ACID table. Skip StatsOptimizer.");
@@ -553,7 +554,7 @@
else if (udaf instanceof GenericUDAFCount) {
                 case Date: {
                   DateColumnStatsData dstats = statData.getDateStats();
                   if (dstats.isSetHighValue()) {
-                    oneRow.add(DateSubType.DAYS.cast(dstats.getHighValue().getDaysSinceEpoch())); 
+                    oneRow.add(DateSubType.DAYS.cast(dstats.getHighValue().getDaysSinceEpoch()));
                   } else {
                     oneRow.add(null);
                   }
@@ -690,7 +691,7 @@
else if (udaf instanceof GenericUDAFCount) {
                 case Date: {
                   DateColumnStatsData dstats = statData.getDateStats();
                   if (dstats.isSetLowValue()) {
-                    oneRow.add(DateSubType.DAYS.cast(dstats.getLowValue().getDaysSinceEpoch())); 
+                    oneRow.add(DateSubType.DAYS.cast(dstats.getLowValue().getDaysSinceEpoch()));
                   } else {
                     oneRow.add(null);
                   }
